package com.zhongwang.mms.module.tool.controller;

import com.zhongwang.mms.base.BaseController;
import com.zhongwang.mms.common.JsonResult;
import com.zhongwang.mms.common.ValidResult;
import com.zhongwang.mms.module.tool.model.AccEquipmentTypeModel;
import com.zhongwang.mms.module.tool.model.AccToolModel;
import com.zhongwang.mms.module.tool.model.EquipmentModel;
import com.zhongwang.mms.module.tool.model.ReportAccToolModel;
import com.zhongwang.mms.module.tool.service.AccEquipmentTypeService;
import com.zhongwang.mms.module.tool.service.AccToolService;
import com.zhongwang.mms.util.ShiroUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 工具库台账表
 */
@Controller
public class AccToolController  extends BaseController {
    @Autowired
    private AccToolService accToolService;
    @Autowired
    private AccEquipmentTypeService accEquipmentTypeService;
    /**
     * 页面
     *
     * @return 页面路径
     */
    @GetMapping("/tool/ku/page")
    @RequiresPermissions({"drive:toolsb:view"})
    public String linkePage(Model model) {
        /*这部分显示页面上的下拉列表的值*/
//        AccEquipmentTypeModel conModel=new AccEquipmentTypeModel();
        model.addAttribute("typelist", accEquipmentTypeService.selectAccEquipmentTypeList(null));
        return "tool/book/list";
    }

    /**
     * 查询办公物资台账信息
     *
     * @param model 设备台账参数
     * @return EquipmentModel
     */
    @ResponseBody
    @PostMapping("/tool/ku/list")
    @RequiresPermissions({"drive:toolsb:view"})
    public JsonResult selectList(AccToolModel model) {
        startPage();
        return jsonResult(accToolService.selList(model));
    }
    /**
     * 办公设备台账-> 导入
     *
     * @param file      导入文件
     * @return JsonResult
     */
    @ResponseBody
    @PostMapping("/tool/ku/import")
    @RequiresPermissions({"drive:toolsb:add"})
    public JsonResult dailyTotalImport(@RequestParam("file") MultipartFile file,@RequestParam("fkTypeId") Integer fkTypeId,@RequestParam("toolMonth") String toolMonth) {
        return success(accToolService.importFile(file,fkTypeId,toolMonth));
    }

    /**
     * 删除
     * @param empId 主键id
     * @return
     */
    @PostMapping("/tool/ku/del")
    @ResponseBody
    @RequiresPermissions({"drive:toolsb:del"})
    public JsonResult deleteByPrimaryKey(Integer empId){
        JsonResult jsonResult = new JsonResult();
        Integer flg=accToolService.del(empId);
        if (flg==1) {
            jsonResult.setType(JsonResult.ResultType.SUCCESS);
            jsonResult.setMsg("删除成功");
        }
        else{
            jsonResult.setType(JsonResult.ResultType.ERROR);
            jsonResult.setMsg("删除失败");
        }
        return jsonResult;
    }

    /**
     * 新增设备台账信息
     */
    @PostMapping("/tool/ku/add")
    @ResponseBody
    @RequiresPermissions({"drive:toolsb:add"})
    public JsonResult insert(ReportAccToolModel data){
        JsonResult jsonResult = new JsonResult();
        int flg=-1;
        /**
         * 设置人员信息和删除标识
         */
        data.setToolIsdelete(0);

        ReportAccToolModel keyModel = new ReportAccToolModel();
        //根据资产编号查询
        keyModel.setToolCode(data.getToolCode());
        keyModel.setFkTypeId(data.getFkTypeId());
        keyModel.setToolMonth(data.getToolMonth());
        AccToolModel checkModel= accToolService.selModel(keyModel);
        if (checkModel != null) {
            //更新参数的model并且赋值
            data.setToolId(checkModel.getToolId());
            //执行修改，不存在序号的问题。
            data.setToolUpdUser(ShiroUtils.getUser().getName());
            flg= accToolService.update(data);
        }else {
            if(data.getToolSortNum()==null) {
                //需要查询最大的序号，间隔为10。
                data.setToolSortNum(accToolService.selectMaxNum());
            }
            data.setToolCreUser(ShiroUtils.getUser().getName());
            data.setToolUpdUser(ShiroUtils.getUser().getName());
            data.setToolIsdelete(0);
            flg= accToolService.insert(data);
        }
        if (flg==1) {
            jsonResult.setType(JsonResult.ResultType.SUCCESS);
            jsonResult.setMsg("添加成功");
        }
        else{
            jsonResult.setType(JsonResult.ResultType.ERROR);
            jsonResult.setMsg("添加失败");
        }
        return jsonResult;
    }


    /**
     * 编辑设备台账信息
     */
    @PostMapping("/tool/ku/edit")
    @ResponseBody
    @RequiresPermissions({"drive:toolsb:edit"})
    public JsonResult edit(ReportAccToolModel data){
        JsonResult jsonResult = new JsonResult();
        int flg= accToolService.update(data);
        if(flg==1){
            jsonResult.setType(JsonResult.ResultType.SUCCESS);
            jsonResult.setMsg("添加成功");
        }
        else{
            jsonResult.setType(JsonResult.ResultType.ERROR);
            jsonResult.setMsg("添加失败");
        }
        return jsonResult;
    }
    /**
     * 检查同一主键是否存在
     * @param paramModel 类型名称和id
     * @return json 数据
     */
    @ResponseBody
    @PostMapping("/tool/ku/checkUnique")
    public ValidResult checkUnique(AccToolModel paramModel) {
        List<AccToolModel> list = accToolService.findByCode(paramModel);
        if(list.size()>0) {
            //已经存在了。
            return ValidResult.FAIL;
        }
        return ValidResult.SUCCESS;
    }

    /**
     * 判断文件是否存在
     *
     * @param url 文件路径
     * @return
     */
    @ResponseBody
    @PostMapping("/tool/ku/exist")
    public JsonResult exist(String url) {
        return jsonResult(accToolService.exist(url));
    }
}
